package com.senyint.sys.utils;

import java.io.IOException;
import java.lang.reflect.Field;

/**
 * {@code JavaUtils}类
 * <p>
 * java环境相关处理工具
 * 
 * @author WangNaiFei, WangNaiFei@senyint.com
 * @date 2017年1月24日 上午10:48:36
 * @version 1.0
 * @since  jdk1.7+
 */
public class JavaUtils {

	/**
	 * 添加classpath 加载DLL用
	 * <p>
	 * 通过反射设置Classloadder的usr_paths属性
	 * 
	 * @author WangNaiFei, WangNaiFei@senyint.com
	 * @date 2017年1月24日 上午10:47:08
	 * @version 1.0
	 * @param path
	 * @throws IOException
	 */
	public static void addJavaLibraryPath(String path) throws IOException {
		try {
			Field field = ClassLoader.class.getDeclaredField("usr_paths");
			field.setAccessible(true);
			String[] paths = (String[]) field.get(null);
			for (int i = 0; i < paths.length; i++) {
				if (path.equals(paths[i])) {
					return;
				}
			}
			String[] tmp = new String[paths.length + 1];
			System.arraycopy(paths, 0, tmp, 0, paths.length);
			tmp[paths.length] = path;
			field.set(null, tmp);
		} catch (IllegalAccessException e) {
			throw new IOException("Failed to get permissions to set library path");
		} catch (NoSuchFieldException e) {
			throw new IOException("Failed to get field handle to set library path");
		}
	}

}